iT邦幫忙

2024 iThome 鐵人賽

DAY 3
0

來試試 Gemini API,不同的模型有不同的限制,但現在都還可以免費式用。
https://ai.google.dev/pricing?hl=zh-tw
https://ithelp.ithome.com.tw/upload/images/20240820/20168318o6HHdVM3sK.png

首先先申請 API Key,第一次開的話可以看一下條款。
https://aistudio.google.com/app/apikey
https://ithelp.ithome.com.tw/upload/images/20240820/20168318RxNzU5IBUn.pnghttps://ithelp.ithome.com.tw/upload/images/20240820/20168318k43qmSwVQZ.png

沒有開過專案的話,點一下 Create API key in new project,會幫你產生一個新專案,順帶產生 API Key。
之後可以在 GCP 上管控。
https://ithelp.ithome.com.tw/upload/images/20240820/20168318QIVoPB0PVP.png!

存下 API key 備用。
https://ithelp.ithome.com.tw/upload/images/20240820/20168318j9URoiJATg.png

第一次用可以參考 Google 的教學,寫的很友善,可以照著做試試看。
https://ai.google.dev/gemini-api/docs/get-started/tutorial?hl=zh-tw&lang=python

先裝 Gemini API 的 SDK,用 pip 就可以了。 -q 是減少安裝時輸出的訊息,-U 是同時升級套件。

pip install -q -U google-generativeai

選用官方說目前能力較強的 gemini-1.5-pro 執行看看,效果真的不錯。

import google.generativeai as genai
genai.configure(api_key='剛剛產生的API key')
model = genai.GenerativeModel('gemini-1.5-pro')
response = model.generate_content("台中最好吃的牛排店?")
print(response.text)

https://ithelp.ithome.com.tw/upload/images/20240820/20168318QUOCXNLjYd.png

如果加上 stream=True ,可以逐句顯示回覆。

response = model.generate_content("台中最好吃的牛排店?", stream=True)
for chunk in response:
    print(chunk.text)
    print("_"*80)

https://ithelp.ithome.com.tw/upload/images/20240820/20168318vUTdIvIcqp.png

我想嘗試他的理解能力,用一張諧音的影像來試試(為了雅觀,貼上來的圖有改過,原本的圖是甚麼,可以看模型的解釋來推測。貼上來的圖是 ChatGPT 4o 生成的)。

import PIL.Image
img = PIL.Image.open(r"G:\LLM\test.jpg")
img

https://ithelp.ithome.com.tw/upload/images/20240820/20168318BFxuWhuT0W.png

他是能理解的。

response = model.generate_content(img, stream=True)
for chunk in response:
    print(chunk.text)
    print("_"*80)

https://ithelp.ithome.com.tw/upload/images/20240820/20168318CHNzfTzXx2.png

他是多模態模型,所以也可以針對影像提問。

response = model.generate_content(["用中文解釋這張圖想表達的意思?", img], stream=True)
for chunk in response:
    print(chunk.text)
    print("_"*80)

https://ithelp.ithome.com.tw/upload/images/20240820/20168318e1UIxMqQfX.png

也可以像 gpt 一樣對話,使用 start_chat 就可以開始一段對話。

chat = model.start_chat(history=[])
response = chat.send_message("想要去台中玩,有甚麼推薦的景點")
print(response.text)

https://ithelp.ithome.com.tw/upload/images/20240820/20168318PTORrjCWMl.png

response = chat.send_message("我喜歡自然風景類型的景點", stream=True)
for chunk in response:
    print(chunk.text)

https://ithelp.ithome.com.tw/upload/images/20240820/201683186PrHBEuCtL.png

輸入與回答的內容都存在 chat.history 中。

for message in chat.history:
    print(message)

https://ithelp.ithome.com.tw/upload/images/20240820/20168318IvInzpMurg.png

另外可以設定甚麼不能回答,參考安全性設定與 HarmCategory 、HarmBlockThreshold 的說明。
https://ai.google.dev/gemini-api/docs/safety-settings#python
https://ai.google.dev/api/generate-content?hl=zh-tw#harmprobability
https://ai.google.dev/api/generate-content?hl=zh-tw#harmblockthreshold

我選擇封鎖仇恨跟危險內容,Threshold 都設定成 BLOCK_LOW_AND_ABOVE,會發現無法輸出。

response = model.generate_content(
    "告訴我美國如何購買槍枝",
    safety_settings={
        HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
        HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    },
    stream=True
)
for chunk in response:
    print(chunk.text)

我們把 candidates 印出來看看,會發現HARM_CATEGORY_HATE_SPEECH 判定為 NEGLIGIBLE,HARM_CATEGORY_DANGEROUS_CONTENT 判定為 LOW,所以不會有輸出。

print(response.candidates)

https://ithelp.ithome.com.tw/upload/images/20240820/2016831887GgK7Tkvv.png

那調整一下,把 HARM_CATEGORY_DANGEROUS_CONTENT 的 Threshold 改成 BLOCK_MEDIUM_AND_ABOVE,重新運行,就會有輸出了。

response = model.generate_content(
    "告訴我美國如何購買槍枝",
    safety_settings={
        HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
        HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
    }
)
print(response.text)

https://ithelp.ithome.com.tw/upload/images/20240820/20168318wxGgbGNrhN.png

今天就先測到這。


上一篇
Day 2: 多模態模型測試,架在 colab 上
下一篇
Day 4: Gemini API 其他用法
系列文
AI 學習紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言